#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
import logging
import platform
import flask
from loguru import logger


def init_loguru(app):
    """
    初始化 loguru 日志系统：
    - 开发环境：日志输出到终端（stdout）
    - 生产环境：日志写入文件 logs/app.log
    - 日志等级来自 app.config['LOG_LEVEL']
    """
    log_level = app.config.get("LOG_LEVEL", "INFO").upper()
    is_debug = app.config.get("DEBUG", False)
    env_label = "development" if is_debug else "production"

    # 清空默认 logger（不然会重复输出）
    logger.remove()

    # 日志格式
    log_format = (
        "<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
        "<level>{level: <5}</level> | "
        "<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - "
        "<level>{message}</level>"
    )

    # 开发环境：输出到终端，彩色显示
    if is_debug:
        logger.add(sys.stdout, level=log_level, format=log_format, colorize=True)
    else:
        # 生产环境：写日志文件，自动分割 & 清理
        os.makedirs("logs", exist_ok=True)
        logger.add(
            "logs/app-{time:YYYY-MM-DD-HH}.log",  # 按小时命名日志文件
            level=log_level,
            rotation="10 MB",  # 日志超 10MB 自动切分
            retention="7 days",  # 保留 7 天的日志
            encoding="utf-8",
            format=log_format,
            compression="gz",  # 压缩旧日志为 .gz 格式
            colorize=False  # 禁止颜色码，避免日志文件乱码
        )

    # 将 Loguru 日志转发到标准 logging 模块
    class InterceptHandler(logging.Handler):
        def emit(self, record):
            # 获取对应的 loguru 级别
            try:
                level = logger.level(record.levelname).name
            except ValueError:
                level = record.levelno

            # 找出记录的位置
            frame, depth = logging.currentframe(), 2
            while frame.f_code.co_filename == logging.__file__:
                frame = frame.f_back
                depth += 1

            logger.opt(depth=depth, exception=record.exc_info).log(
                level, record.getMessage()
            )

    # 替换 Flask 默认 logger 的 handlers
    logging.getLogger().handlers = [InterceptHandler()]
    app.logger.setLevel(log_level)

    # ✅ 输出启动信息（环境、日志、数据库、平台等）
    logger.info("🚀 Flask 项目启动成功")
    logger.info(f"🔧 当前环境: {env_label}")
    logger.info(f"🪵 日志等级: {log_level}")
    logger.info(f"🐍 Debug 模式: {is_debug}")
    logger.info(f"🗄️ 数据库地址: {app.config.get('SQLALCHEMY_DATABASE_URI', '未配置')}")
    logger.info(
        f"💻 系统平台: {platform.system()}-{platform.release()} | Python {platform.python_version()} | Flask {flask.__version__}"
    )

    return app.logger
